﻿/**
 * @file guild_service_query_context.h
 * @date 2021/04/13 20:34
 *
 * @author harrybao (harrybao@123u.com)
 *
 * @brief 公会服务查询上下文
 *
 * @version v1.0.0
 *
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 *
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author <th>Description
 * <tr><td>2021/04/13 20:34         <td>1.0.0       <td>harrybao
 * <td>创建初始版本
 * </table>
 */

// #ifndef GUILD_SERVICE_QUERY_CONTEXT_H
// #define GUILD_SERVICE_QUERY_CONTEXT_H

#pragma once

#include <memory>
#include "rpc_defines.h"

struct GetGuildBriefArg;
struct GetGuildBriefRes;
struct GetGuildMemberArg;
struct GetGuildMemberRes;
struct SearchGuildArg;
struct SearchGuildRes;
struct GetGuildBriefListArg;
struct GetGuildBriefListRes;
struct GetGuildApplicationArg;
struct GetGuildApplicationRes;
struct GetGuildMembersArg;
struct GetGuildMembersRes;
struct GetGuildRepositoryRoleViewArg;
struct GetGuildRepositoryRoleViewRes;
struct QueryGuildWelfareAwardArg;
struct QueryGuildWelfareAwardRes;
struct QueryGuildBuildingInfoArg;
struct QueryGuildBuildingInfoRes;
struct QueryGuildCrystalInfoArg;
struct QueryGuildCrystalInfoRes;

namespace kratos {
namespace service {
class ServiceContext;
}
}  // namespace kratos

namespace guild_service {

/**
 * @brief 公会服务查询上下文类
 *
 */
class GuildServiceQueryContext {
  GuildServiceQueryContext() = delete;
  GuildServiceQueryContext(const GuildServiceQueryContext &) = delete;
  GuildServiceQueryContext(GuildServiceQueryContext &&) = delete;
  const GuildServiceQueryContext &operator=(const GuildServiceQueryContext &) =
      delete;
  const GuildServiceQueryContext &operator=(GuildServiceQueryContext &&) =
      delete;

 public:
  /**
   * @brief 启动
   *
   * @param context 服务上下文
   * @return true 启动成功
   * @return false 启动失败
   */
  static bool Start(kratos::service::ServiceContext *context);

  /**
   * @brief 关闭
   * @return 执行结果
   */
  static bool Stop();

  /**
   * @brief 初始化
   * @param context
   * @return 执行结果
   */
  static bool Init(kratos::service::ServiceContext *context);
  
  /**
   * @brief 未初始化
   * @return 执行结果
   */
  static bool Uninit();

  /**
   * @brief 更新
   *
   * @param ms 间隔（单位 毫秒 ）
   */
  static void Tick(time_t ms);

  /**
   * @brief 获取公会简略信息
   *
   * @param arg 获取公会简略信息参数
   * @param res 获取公会简略信息返回
   */
  static void GetGuildBrief(rpc::StubCallPtr call, const GetGuildBriefArg &arg,
                            std::shared_ptr<GetGuildBriefRes> &res);

  /**
   * @brief 获取公会成员信息
   *
   * @param arg 获取公会成员信息参数
   * @param res 获取公会成员信息返回
   */
  static void GetGuildMember(rpc::StubCallPtr call, const GetGuildMemberArg &arg,
                             std::shared_ptr<GetGuildMemberRes> &res);

  /**
   * @brief 获取公会简略信息列表
   *
   * @param arg 获取公会简略信息列表参数
   * @param res 获取公会简略信息列表返回
   */
  static void GetGuildBriefList(rpc::StubCallPtr call, const GetGuildBriefListArg &arg,
                                std::shared_ptr<GetGuildBriefListRes> &res);

  /**
   * @brief 搜索公会
   *
   * @param arg 搜索公会参数
   * @param res 搜索公会返回
   */
  static void SearchGuild(rpc::StubCallPtr call, const SearchGuildArg &arg,
                          std::shared_ptr<SearchGuildRes> &res);

  /**
   * @brief 获取公会申请列表
   *
   * @param arg 获取公会申请列表参数
   * @param res 获取公会申请列表返回
   */
  static void GetGuildApplication(rpc::StubCallPtr call, const GetGuildApplicationArg &arg,
                                  std::shared_ptr<GetGuildApplicationRes> &res);

  /**
   * @brief 获取公会成员列表
   *
   * @param call rpc请求
   * @param arg 获取公会成员列表参数
   * @param res 获取公会成员列表返回
   */
  static void GetGuildMembers(rpc::StubCallPtr call, const GetGuildMembersArg &arg,
                              std::shared_ptr<GetGuildMembersRes> &res);
  /**
   * @brief 获取公会仓库角色视角信息
   * 
   * @param call rpc请求
   * @param arg 获取公会仓库角色视角信息参数
   * @param res 获取公会仓库角色视角信息返回
   */
  static void GetGuildRepositoryRoleView(rpc::StubCallPtr call, 
      const GetGuildRepositoryRoleViewArg &arg,
      std::shared_ptr<GetGuildRepositoryRoleViewRes> &res);

  /**
   * @brief 查询公会福利奖励
   *
   * @param call rpc请求
   * @param arg 查询公会福利奖励参数
   * @param res 查询公会福利奖励返回
   */
  static void QueryGuildWelfareAward(rpc::StubCallPtr call,
      const QueryGuildWelfareAwardArg &arg,
      std::shared_ptr<QueryGuildWelfareAwardRes> &res);
  
  /**
   * @brief 查询公会建筑信息
   * 
   * @param call rpc请求
   * @param arg 查询公会建筑信息请求
   * @param res 查询公会建筑信息返回
   */
  static void QueryGuildBuildingInfo(rpc::StubCallPtr call,
      const QueryGuildBuildingInfoArg &arg,
      std::shared_ptr<QueryGuildBuildingInfoRes> &res);
  
  /**
   * @brief 查询公会水晶信息
   * 
   * @param call rpc请求
   * @param arg 查询公会水晶信息请求
   * @param res 查询公会水晶信息返回
   */
  static void QueryGuildCrystalInfo(rpc::StubCallPtr call,
      const QueryGuildCrystalInfoArg &arg,
      std::shared_ptr<QueryGuildCrystalInfoRes> &res);
};
}  // namespace guild_service

// #endif  // GUILD_SERVICE_QUERY_CONTEXT_H